package org.capgemini.tienda.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.capgemini.tienda.utils.ContextKeys;


/**
 * Servlet Filter implementation class CounterFilter
 */
public class CounterFilter implements Filter {

	FilterConfig config;

	public void destroy() {
		config = null;
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
		final ServletContext context=config.getServletContext();
		String path=((HttpServletRequest) request).getServletPath();
		
		synchronized (context) {
			Integer contador=(Integer) context.getAttribute(ContextKeys.CONTADOR);
			if(contador==null){
				contador=new Integer(0);
			}
			context.setAttribute(ContextKeys.CONTADOR, ++contador);
			
			if(path.equals("/usuarios.do")){
				Integer usuarios=(Integer)context.getAttribute("usuarios");
				if(usuarios==null){
					usuarios=new Integer(0);
				}
				context.setAttribute("usuarios", ++usuarios);
			}
			
			if(path.equals("/productos.do")){
				Integer productos=(Integer)context.getAttribute("productos");
				if(productos==null){
					productos=new Integer(0);
				}
				context.setAttribute("productos", ++productos);
			}
			
			if(path.equals("/admin.do")){
				Integer admin=(Integer)context.getAttribute("admin");
				if(admin==null){
					admin=new Integer(0);
				}
				context.setAttribute("admin", ++admin);
			}
			
			if(path.equals("/carrito.do")){
				Integer carrito=(Integer)context.getAttribute("carrito");
				if(carrito==null){
					carrito=new Integer(0);
				}
				context.setAttribute("carrito", ++carrito);
			}
			
			if(path.equals("/pedido.do")){
				Integer pedido=(Integer)context.getAttribute("pedido");
				if(pedido==null){
					pedido=new Integer(0);
				}
				context.setAttribute("pedido", ++pedido);
			}
			
			if(path.equals("/nuevoProducto.do")){
				Integer nuevoProducto=(Integer)context.getAttribute("nuevoProducto");
				if(nuevoProducto==null){
					nuevoProducto=new Integer(0);
				}
				context.setAttribute("nuevoProducto", ++nuevoProducto);
			}
			
			if(path.equals("/panel.do")){
				Integer panel=(Integer)context.getAttribute("panel");
				if(panel==null){
					panel=new Integer(0);
				}
				context.setAttribute("panel", ++panel);
			}
			
			if(path.equals("/verCarrito.do")){
				Integer verCarrito=(Integer)context.getAttribute("verCarrito");
				if(verCarrito==null){
					verCarrito=new Integer(0);
				}
				context.setAttribute("verCarrito", ++verCarrito);
			}
			
			if(path.equals("/registro.do")){
				Integer registro=(Integer)context.getAttribute("registro");
				if(registro==null){
					registro=new Integer(0);
				}
				context.setAttribute("registro", ++registro);
			}
			
			if(path.equals("/inicio.do")){
				Integer inicio=(Integer)context.getAttribute("inicio");
				if(inicio==null){
					inicio=new Integer(0);
				}
				context.setAttribute("inicio", ++inicio);
			}
			
			if(path.equals("/counter.do")){
				Integer counter=(Integer)context.getAttribute("counter");
				if(counter==null){
					counter=new Integer(0);
				}
				context.setAttribute("counter", ++counter);
			}
			
			
		}
		
		chain.doFilter(request, response);
	}

	public void init(FilterConfig config) throws ServletException {
		this.config = config;
	}

}
